package com.cy.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cy.jt.mapper.ItemCatMapper;
import com.cy.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: LiuXingYu
 * @date: 2021/8/5 15:41
 */
@Service
public class ItemCatServiceImpl implements ItemCatService{

    @Autowired
    private ItemCatMapper itemCatMapper;

    public List<ItemCat> findChildrenList(Integer id,Integer type, Map<Integer,List<ItemCat>> map){
        if(id==null) id = 0;
        List<ItemCat> itemCatList = map.get(id);

        if(type == 1){
            return itemCatList;
        }
        if(itemCatList == null){
            return null;
        }
        for (ItemCat itemCat: itemCatList){
            if(itemCat.getLevel() < type){
                List<ItemCat> childrenList = findChildrenList(itemCat.getId(),type,map);
                itemCat.setChildren(childrenList);
            }
        }
        return itemCatList;
    }

    public Map<Integer,List<ItemCat>> getItemCatMap(){
        // 获取所有itemCat对象
        List<ItemCat> itemCatList = itemCatMapper.selectList(null);
        // 构造map集合,
        Map<Integer,List<ItemCat>> map = new HashMap<>();
        // 循环遍历,根据parentId对itemCat对象进行分类
        for (ItemCat itemCat : itemCatList) {
            // 获取每个元素的parentId
            Integer parentId = itemCat.getParentId();
            // 判断该 parentId 是否已经在 map 的 key 中, 如果在则将该元素添加到parentId对应的集合当中
            if (map.containsKey(parentId)){
                map.get(parentId).add(itemCat);
            } else {
                List<ItemCat> itemCats = new ArrayList<>();
                itemCats.add(itemCat);
                map.put(parentId, itemCats);
            }
        }
        return map;
    }

    @Override
    public List<ItemCat> findItemCatList(Integer type) { // type=3 代表共有三级菜单
        //获取数据
        Map<Integer,List<ItemCat>> map = getItemCatMap();
        return findChildrenList(null,type,map);
    }

    @Override
    public void updateStatus(ItemCat itemCat) {
        itemCatMapper.updateById(itemCat);
    }

    @Override
    public void saveItemCat(ItemCat itemCat) {
        itemCatMapper.insert(itemCat);
    }

    @Override
    public void updateItemCat(ItemCat itemCat) {
        itemCatMapper.updateById(itemCat);
    }

    @Override
    public void deleteItemCat(ItemCat itemCat) {
        if (itemCat.getLevel() == 3){
            itemCatMapper.deleteById(itemCat.getId());
        }
        if (itemCat.getLevel() == 2){
            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
            itemCatMapper.delete(queryWrapper);
            itemCatMapper.deleteById(itemCat.getId());
        }
        if (itemCat.getLevel() == 1){
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.eq("parent_id", itemCat.getId());
            List<ItemCat> itemCatList2 = itemCatMapper.selectList(queryWrapper);
            for (ItemCat itemCat2 : itemCatList2) {
                QueryWrapper<ItemCat> queryWrapper2 = new QueryWrapper<>();
                queryWrapper2.eq("parent_id", itemCat2.getId());
                itemCatMapper.delete(queryWrapper2);
                itemCatMapper.deleteById(itemCat2.getId());
            }
            itemCatMapper.deleteById(itemCat.getId());
        }

    }


}
